home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / byobu / updates_available < prev    next >
Text File  |  2009-10-11  |  3KB  |  91 lines

  1. #!/bin/sh -e
  2. #
  3. #    updates_available: calculate and cache the number of updates available
  4. #    Copyright (C) 2008 Canonical Ltd.
  5. #
  6. #    Authors: Dustin Kirkland <kirkland@canonical.com>
  7. #
  8. #    This program is free software: you can redistribute it and/or modify
  9. #    it under the terms of the GNU General Public License as published by
  10. #    the Free Software Foundation, version 3 of the License.
  11. #
  12. #    This program is distributed in the hope that it will be useful,
  13. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. #    GNU General Public License for more details.
  16. #
  17. #    You should have received a copy of the GNU General Public License
  18. #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19.  
  20. if [ "$1" = "--detail" -o "$1" = "--short" ]; then
  21.     if which apt-get >/dev/null; then
  22.         detail=`apt-get -s -o Debug::NoLocking=true upgrade`
  23.         if [ "$1" = "--detail" ]; then
  24.             printf "$detail"
  25.         else
  26.             short=`printf "$detail" | grep ^Inst | wc -l`
  27.             printf "$short"
  28.         fi
  29.     fi
  30.     exit 0
  31. fi
  32.  
  33. print_updates() {
  34.     u=$1
  35.     s=$2
  36.     if [ -n "$u" ]; then
  37.         if [ "$u" -gt 0 ]; then
  38.             printf "\005{=b rW}%d\005{-}\005{= rW}!" "$u"
  39.             if [ -n "$s" ]; then
  40.                 if [ "$s" -gt 0 ]; then
  41.                     printf "!"
  42.                 fi
  43.             fi
  44.             printf "\005{-} "
  45.         fi
  46.     fi
  47. }
  48.  
  49. update_cache() {
  50.     mycache=$1
  51.     # Now we actually have to do hard computational work to calculate updates.
  52.     # Let's try to be "nice" about it:
  53.     renice 10 $$ >/dev/null 2>&1 || true
  54.     ionice -c3 -p $$ >/dev/null 2>&1 || true
  55.     # These are very computationally intensive processes.
  56.     # Background this work, have it write to the cache files,
  57.     # and let the next cache check pick up the results.
  58.     if [ -x /usr/lib/update-notifier/apt-check ]; then
  59.         # If apt-check binary exists, use it
  60.         /usr/lib/update-notifier/apt-check 2>&1 | tail -n 1 | sed "s/;/ /" > $mycache &
  61.     elif which apt-get >/dev/null; then
  62.         # If apt-get exists, use it
  63.         apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst > $mycache &
  64.     elif which zypper >/dev/null; then
  65.         # If zypper exists, use it
  66.         zypper --no-refresh lu --best-effort | grep 'v |' | wc -l > $mycache &
  67.     elif which yum >/dev/null; then
  68.         # If yum exists, use it
  69.         # TODO: We need a better way of counting updates available from a RH expert
  70.         yum list updates -q | egrep -v "Updated Packages" | wc -l > $mycache &
  71.     fi
  72. }
  73.  
  74. PKG="byobu"
  75.  
  76. # The following is somewhat Ubuntu and Debian specific (apt).
  77. # I would welcome contributions from other distros to make this
  78. # more distro-agnostic.
  79.  
  80. [ -d "/var/run/screen/S-$USER" ] && DIR="/var/run/screen/S-$USER" || DIR="$HOME/.byobu"
  81. mycache="$DIR/$PKG.updates-available"
  82.  
  83. # If mycache is present, use it
  84. [ -r $mycache ] && print_updates `grep "^[0-9]" $mycache | sed "s/ .*$//"`
  85.  
  86. # Update the cache if necessary
  87. if [ ! -e "$mycache" ] || [ "/var/lib/apt" -nt "$mycache" ] || [ "/var/lib/apt/lists" -nt "$mycache" ]; then
  88.     # If apt is newer than mycache, background an update now
  89.     update_cache "$mycache"
  90. fi
  91.